1143. Longest Common Subsequence
#Algorithm #Algorithm_LCS #Algorithm_DP
1143. Longest Common Subsequence
1. 문제
1-1. 원문
Given two strings text1
and text2
, return the length of their longest common subsequence. If there is no common subsequence, return 0
.
A subsequence of a string is a new string generated from the original string with some characters (can be none) deleted without changing the relative order of the remaining characters.
- For example,
"ace"
is a subsequence of"abcde"
.
A common subsequence of two strings is a subsequence that is common to both strings.
Example 1:
Input: text1 = "abcde", text2 = "ace"
Output: 3
Explanation: The longest common subsequence is "ace" and its length is 3.
Example 2:
Input: text1 = "abc", text2 = "abc"
Output: 3
Explanation: The longest common subsequence is "abc" and its length is 3.
Example 3:
Input: text1 = "abc", text2 = "def"
Output: 0
Explanation: There is no such common subsequence, so the result is 0.
Constraints:
1 <= text1.length, text2.length <= 1000
text1
andtext2
consist of only lowercase English characters.
1-2. 내용 번역
최장 공통 부분 수열을 구하여라.
2. 문제 이해
LCS 문제 날것 그 자체이다. (LCS Algorithm 참고)
3. 구현
class Solution {
fun longestCommonSubsequence(text1: String, text2: String): Int {
val text1Length = text1.length
val text2Length = text2.length
val lcsArr: Array<IntArray> = Array(text1Length+1){IntArray(text2Length+1){0}}
text1.forEachIndexed { text1Idx, text1Char ->
text2.forEachIndexed { text2Idx, text2Char ->
lcsArr[text1Idx+1][text2Idx+1] = if (text1Char == text2Char) {
lcsArr[text1Idx][text2Idx] + 1
} else {
Math.max(lcsArr[text1Idx+1][text2Idx], lcsArr[text1Idx][text2Idx+1])
}
}
}
return lcsArr[text1Length][text2Length]
}
}